MarkdownをPDFに変換する「md-to-pdf」は痒いところに手が届く素敵ツール
Markdown to PDF
Markdownで書きたいけど、PDFで出力したい という機会はエンジニアはよく出くわすと思います。
「Markdown to PDF」といえばGitBook CLIが有名ですが、こちらはメンテナンスがストップされているため推奨されません(環境依存による不具合などが解決されない)。
GitBookほど多機能でなくても良いですが、綺麗にいい感じに出力したい…!と探し回っていたところ md-to-pdf が最も私の要件に合致したので使ってみました。
そんな私の要件はこちら。
- CLIから出力したい
- ページ内リンクが作れる
- ページ分割ができる
- ページ数表示が簡単にできる
- 全体に対して簡単にテーマをCSSで適用できる
- いざという時にはHTML+CSSでカスタマイズができる
それに対して md-to-pdf は以下のような機能があります。
- ディレクトリ内のMarkdownファイルを全て一気にPDFに変換する
- Watchモード
- CSSをWebまたはローカルから適用
- ファイルの先頭で数多くの設定が可能
- ヘッダーとフッターの設定
- ページ分割
- シンタックスハイライト
- 他のツールを用いた拡張
- プログラマティックなAPI
またレンダリングにはHeadless ChromiumであるPuppeteerを使っており、表示上の問題がより起こらなそうな印象です。
使い方
使い方はいたって簡単です。
まず npm module として提供されているので yarn init
などで package.json
を作成後、以下のコマンドでインストールします。
$ yarn add md-to-pdf
あとは同じディレクトリにMarkdownファイルを置けば、PDFに変換できます。
以下のコマンドを実行するだけです。
$ npx md-to-pdf ✔ generating PDF from Example.md
Example.md
というファイルを置けば Example.pdf
が作成されます。
複数のファイルも一気に出力
例えば複数のファイルが存在する場合も、
Example1.md Example2.md Example3.md
一発です!
$ npx md-to-pdf ✔ generating PDF from Example1.md ✔ generating PDF from Example2.md ✔ generating PDF from Example3.md
ヘッダーとフッター
以下をMarkdownファイルの先頭に記載すると、ヘッダーとフッターを加えることができます。
--- pdf_options: format: A4 margin: 30mm 20mm displayHeaderFooter: true headerTemplate: |- <style> section { margin: 0 auto; font-family: system-ui; font-size: 11px; } </style> <section> <span class="date"></span> </section> footerTemplate: |- <section> <div> Page <span class="pageNumber"></span> of <span class="totalPages"></span> </div> </section> ---
設定したテンプレート通りに書き出されます。
スタイル調整
GitHub風にしたい場合は以下をMarkdownファイルの先頭に記載します。
--- stylesheet: https://cdnjs.cloudflare.com/ajax/libs/github-markdown-css/2.10.0/github-markdown.min.css body_class: markdown-body ---
いい感じですね!
ページ内リンク
以下のような感じで記載すると、ページ内でリンクすることができます。
## TOC - [TOC](#toc) - [aaa](#aaa) - [bbb](#bbb) - [ccc](#ccc) ## aaa ## bbb ## ccc
もちろんPDF上でもちゃんと動きます。
綺麗にサクッと出力したい場合におすすめ!
md-to-pdfはサクッと試すことができ、また柔軟性もあって非常に便利なツールだと思います。ぜひ試してみてください!